﻿#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//int main()
//{
//	int a = 10;
//	printf("%p\n", &a);
//	int* pa = &a;//int*,指向的是变量类型，*表是指针变量
//	*pa = 100;  //解引用操作符，这样*pa实际上就是a，换了一种方式改 变量值
//	return 0;
//}

//指针变量的大小
//如果指针变量是⽤来存放地址的，那么指针变量的⼤⼩就得是4个字节的空间才可以。
//同理64位机器，假设有64根地址线，⼀个地址就是64个⼆进制位组成的⼆进制序列，存储起来就需要
//8个字节的空间，指针变量的⼤⼩就是8个字节。

//int main()
//{
//
//
//
//
//	printf("%zd\n", sizeof(char*));
//	printf("%zd\n", sizeof(short*));
//	printf("%zd\n", sizeof(int*));
//	printf("%zd\n", sizeof(double*));
//	return 0;
//
//
//}

//结论： 
//32位平台下地址是32个bit位，指针变量⼤⼩是4个字节
//•
//64位平台下地址是64个bit位，指针变量⼤⼩是8个字节
//•
//注意指针变量的⼤⼩和类型是⽆关的，只要指针类型的变量，在相同的平台下，⼤⼩都是相同的。

//地址指向的单元中存放的字节长度不同，但地址字节长度是相同的

//int main()
//{
//
//		int n = 0x11223344;
//		int* pi = &n;
//		*pi = 0;
//
//
//	return 0;
//}
//
////指针类型决定了指针变量在解引用时访问几个字节
//int main()
//{
//	int n = 0x11223344;
//	char* pc = (char*)&n;
//	*pc = 0;
//	return 0;
//}


//
int main()
{
	int n = 10;
	char* pc = (char*)&n;
	int* pi = &n;
	printf("%p\n", &n);
	printf("%p\n", pc);
	printf("%p\n", pc + 1);
	printf("%p\n", pi);
	printf("%p\n", pi + 1);
	return  0;
}
//我们可以看出，
//char*
//类型的指针变量 + 1跳过1个字节，
//int*
//类型的指针变量 + 1跳过了4个字节。
//这就是指针变量的类型差异带来的变化。指针 + 1，其实跳过1个指针指向的元素。指针可以 + 1，那也可
//以 - 1。
// 
// 
//结论：指针的类型决定了指针向前或者向后⾛⼀步有多⼤（距离）